package com.iacrqq.sedaf.application;

import com.iacrqq.sedaf.application.adaptive.ApplicationAdjuster;
import com.iacrqq.sedaf.common.Controllable;
import com.iacrqq.sedaf.common.Destroyable;
import com.iacrqq.sedaf.common.Initializable;
import com.iacrqq.sedaf.common.Nameable;
import com.iacrqq.sedaf.config.Configuration;
import com.iacrqq.sedaf.event.EventDispatcher;
import com.iacrqq.sedaf.queue.Queue;
import com.iacrqq.sedaf.stage.Stage;

/**
 * 
 * @author sihai
 *
 */
public interface Application extends Initializable, Destroyable, Nameable, Controllable{
	
	/**
	 * 
	 * @param queue
	 */
	void addQueue(Queue queue);
	
	/**
	 * 
	 * @param stage
	 */
	void addStage(Stage stage);
	
	/**
	 * 
	 * @param config
	 */
	void setConfiguration(Configuration config);
	
	/**
	 * 
	 * @return
	 */
	Configuration getConfiguration();
	
	
	void setEventDispatcher(EventDispatcher eventDispatcher);
	
	/**
	 * 
	 * @param adjuster
	 */
	void setAdjuster(ApplicationAdjuster adjuster);
	
	/**
	 * 
	 */
	void startAdaptiveAjust();
	/**
	 * 
	 */
	void stopAdaptiveAjust();
}
